﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NHibernate;
using schedulelist.ORM.dao.classes;
using schedulelist.ORM.dao.interfaces;
using schedulelist.ORM.domain;
using schedulelist.ORM.dao;

namespace schedulelist
{
    public partial class CustForm : System.Web.UI.Page
    {
        Interlayer Interlayer = new Interlayer(); 
        public static string name;
        public static string priority;
        public static string contacts;

        public static int index;//индекс изменяемой записи
        public static bool edit = false;//режим изменения

        protected void Page_Load(object sender, EventArgs e) {}

        //обработчик на обновление текущей страницы
        protected void Page_Prerender(object sender, EventArgs e)
        {
            if (Interlayer.getFactory().getUserDAO().getUserByLogin(Login.CurrentLog) == null)
            {
                Response.Redirect("~/Login.aspx");
            }
            ICustomerDAO cDAO1 = Interlayer.getFactory().getCustomerDAO();
            //получаем всех кастомеров из базы
            List<Customer> c = cDAO1.GetAll();
            //и передаем их в GridView1 на вывод 
            GridView1.DataSource = c;
            GridView1.DataBind();
            IRoleDAO rDAO1 = Interlayer.getFactory().getRoleDAO();
            //Получаем юзера по логину для проверки его прав
            Role r = rDAO1.getRoleByUserLogin(Login.CurrentLog);
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                if (!r.uedit)//а роль  у текущего юзера - админ?
                {
                    //нет
                    GridView1.Rows[i].Cells[4].Enabled = false;//изменение/удаление не разрешено
                    Button1.Enabled = false;//добавление не разрешено
                    Button4.Enabled = false;
                }
            }
            if (edit)
            {//проходим по всех рядах 
                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    if (i == index)
                    {//находим нужную строчку по index
                        ((Button)(GridView1.Rows[i].Cells[4].FindControl("ibDelete"))).Visible = false;
                        ((Button)(GridView1.Rows[i].Cells[4].FindControl("Button7"))).Visible = false;
                        ((Button)(GridView1.Rows[i].Cells[4].FindControl("Button3"))).Visible = true;
                        ((Button)(GridView1.Rows[i].Cells[4].FindControl("Button2"))).Visible = true;
                        ((Button)(GridView1.Rows[i].Cells[4].FindControl("Button6"))).Visible = true;
                        //убираем с виду конпки "del", "edit"
                        //показываем кнопки "quicked","cancel","advanced ed"
                    }

                }
                //заполняем поля изменяемой записи ранее сохраненными
                ((DropDownList)(GridView1.Rows[index].Cells[2].FindControl("DropDownList1"))).SelectedValue = priority;
            }
            edit = false;
        }

        //Отмена
        protected void Undo(object sender, EventArgs e)
        {
            Response.Redirect("~/CustForm.aspx");//refresh
        }

        //Добавление записи
        protected void ibInsert_Click(object sender, EventArgs e)
        {
            SiteMaster.add = true;//addmode
            SiteMaster.tabletype = 2;
            Response.Redirect("~/TempPage.aspx");//refresh
        }

        //Удаление записи
        protected void GridView1_RowDeleting(object sender,
        GridViewDeleteEventArgs e)
        {
            //получаем индекс удаляемой строки в GridView1
            int index = e.RowIndex;
            GridViewRow row = GridView1.Rows[index];
            //key - ключ, по которому ищется удаляемая запись в таблице Customer
            //здесь key - name
            string key = ((Label)(row.Cells[1].FindControl("myLabel2"))).Text;
            ICustomerDAO CuDAO = Interlayer.getFactory().getCustomerDAO();
            Customer c = CuDAO.getCustomerByName(key);
            CuDAO.Delete(c);
            Response.Redirect("~/CustForm.aspx");//refresh
        }

        //Изменение записи
         protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            //появляются эдит-текстбоксы
            edit = true;
            //Получить индекс выделенной строки
            index = e.NewEditIndex;
            //storing current editing object's state
            name = ((Label)(GridView1.Rows[index].Cells[1].FindControl("myLabel2"))).Text;
            priority = ((Label)(GridView1.Rows[index].Cells[2].FindControl("myLabel3"))).Text;
            contacts = ((Label)(GridView1.Rows[index].Cells[3].FindControl("myLabel4"))).Text;
            
        }

         //обновление записи
        protected void Updating(object sender, EventArgs e)
        {
            //обновление записи после быстрого ее изменения
            //сохраняем всё что изменилось
            string b1 = ((TextBox)(GridView1.Rows[index].Cells[1].FindControl("myTextBox2"))).Text;
            string b2 = ((DropDownList)(GridView1.Rows[index].Cells[2].FindControl("DropDownList1"))).SelectedValue;
            string b3 = ((TextBox)(GridView1.Rows[index].Cells[3].FindControl("myTextBox4"))).Text;
            ICustomerDAO cDAO1 = Interlayer.getFactory().getCustomerDAO();
            Customer c = cDAO1.getCustomerByName(name);
            //запихиваем сохраненное в обьект
            c.name = b1;
            c.priority = b2;
            c.contacts = b3;
            cDAO1.SaveOrUpdate(c);
            GridView1.EditIndex = -1;
            GridView1.ShowFooter = false;
            GridView1.DataBind();
            Response.Redirect("~/CustForm.aspx");
        }

        //расширенный режим изменения 
        protected void AED(object sender, EventArgs e)
        {
            SiteMaster.tabletype = 2;
            SiteMaster.add = false;//editmode
            Response.Redirect("~/TempPage.aspx");
        }

        //Быстрое добавление записи
        protected void QAD(object sender, EventArgs e)
        {
            //показываем доп. сторчку с пустыми текстбоксами
            //и кнопками "add" & "cancel"
            GridView1.ShowFooter = true;
        }

        //обработчик на нажатие "add"
        protected void QuickAd(object sender, EventArgs e)
        {
            //получаем с текстбоксов/DropDownListов значения
            string s1 = ((TextBox)GridView1.FooterRow.FindControl("MyFooterTextBox2")).Text;
            string s2 = ((DropDownList)GridView1.FooterRow.FindControl("DropDownList2")).SelectedValue;
            string s3 = ((TextBox)GridView1.FooterRow.FindControl("MyFooterTextBox4")).Text;
            ICustomerDAO cDAO1 = Interlayer.getFactory().getCustomerDAO();
            Customer  c = new Customer();
            //запихиваем сохраненное в обьект
            c.name = s1;
            c.priority = s2;
            c.contacts =s3;
            cDAO1.SaveOrUpdate(c);
            Response.Redirect("~/CustForm.aspx");
            GridView1.ShowFooter = false;
        }
        //Изменение номера текущей страницы
        protected void GridView1_PageIndexChanging(object sender,
        GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            GridView1.EditIndex = -1;    //
            //GridView1.ShowFooter = true; //     Cancel() maybe...
            GridView1.DataBind();        //
        }
    }
}
